共计 1670 个字符,预计需要花费 5 分钟才能阅读完成。
一.RBAC 介绍
1. 什么是 RBAC
- RBAC 是基于角色的访问控制 (Role-Based Access Control)
- 在 RBAC 中, 权限与角色相关联, 用户通过成为适当角色的成员而得到这些角色的权限
- 这就极大地简化了权限的管理, 这样管理都是层级相互依赖的, 权限赋予给角色, 而把角色又赋予用户, 这样的权限设计很清楚, 管理起来很方便
2.RBAC 的应用
- Django 的 Auth 组件 采用的认证规则就是 RBAC
- 专门做人员权限管理的系统(CRM 系统), 公司内部使用, 数据量都在 10w 以下, 一般效率要求也不是很高
- 用户量极大的常规项目, 会分两种用户:前台用户 (三大认证) 和 后台用户(使用 RBAC 来管理)
没有特殊要求的 Django 项目可以直接采用 Auth 组件的权限六表, 不需要自定义六个表, 也不需要断开表关系,单可能需要自定义 User 表
3. 前台用户(三大认证)
- 前台指的不是前端, 而是普通用户所看到的界面, 使用 认证、权限、频率 来管理控制访问
- 简单来说 : 认证确定了你是谁
- 权限确定你能不能访问某个接口
- 限制确定你访问的某个接口的频率
4. 后台用户(使用 BRAC 来管理)
- 后台指的是后台管理界面, 使用 RBAC 基于角色的访问控制
例如 :
- 普通员工只能访问某张表的某条记录
- 管理员或组长能对表和数据进行修改和新增等操作
- 老板能对所有数据拥有所有权限
二.RBAC 的演变过程
1. 用户与权限直接关联
- 也就是某个用户拥有某个权限, 这种结构能够很清晰的表现出用户和权限之间的关系
- 问题 : 以后随着人员增加, 每一个用户都需要重新授权或者朱七、王八离职之后, 需要针对每一个用户进行多种权限的回收, 繁琐
2. 用户与权限之间添加角色
- 将用户进行分类, 加进不同的角色里边(相当于组的概念), 一个角色拥有某些权限, 具有统一角色的用户拥有相同的权限
- 一个用户也可以对应多个角色
三.RBAC 表设计
1. 三张表
- 用户表 : auth_user
- 角色表 : auth_group
- 权限表 : auth_permission
用户表与角色表通过外键与权限表关联
2. 六张表
- 用户表 : auth_user
- 角色表 : auth_group
- 权限表 : auth_permission
- 角色和权限是多对多 : auth_group_permissions
- 用户和角色是多对多 : auth_user_groups
- 用户和权限的多对多表 : auth_user_user_permissions
四. 实操
1.models.py 中写模型类, 扩写一下 auth_user 表
from django.contrib.auth.models import AbstractUser
# 为 auth_user 表增加 phone 字段
class UserInfo(AbstractUser):
phone = models.CharField(max_length=11, unique=True)
class Meta:
verbose_name_plural = '用户信息表'
def __str__(self):
return self.username
2.admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from drf_test import models
# 自定义 User 表后,admin 界面管理 User 类
class UserAdmin(DjangoUserAdmin):
# 添加用户可操作字段
add_fieldsets = (
(None, {'classes': ('wide',),
'fields': ('username', 'password', 'is_staff', 'phone', 'groups', 'user_permissions'),
}),
)
# 展示用户呈现的字段
list_display = ('username', 'phone', 'is_staff', 'is_active', 'is_superuser')
admin.site.register(models.UserInfo, UserAdmin)
3. 访问后台管理
正文完